package co.com.colcomercio.interfaceRecaudos;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import co.com.colcomercio.interfaceRecaudos.serPublicos.service.RecaudoServiciosPublicosService;
import co.com.colcomercio.interfaceRecaudos.sufi.service.RecaudosSufiService;
import co.com.colcomercio.mediosMagneticos.service.ConsultasDIANService;
import co.com.colcomercio.util.ManejoParam;
import co.com.colcomercio.util.constants.GeneralConstants;
import co.com.colcomercio.util.exception.OperacionException;
import co.com.colcomercio.util.genArchivos.object.ArchivoTXT;

public class CargaInformacion {

		private static void validarEntradasVacias(String... params) throws OperacionException
		{
			try
			{
				if(params == null)
					throw new Exception("Datos de entrada son obligarorios");
				else
				{
					if(params.length < 4)
						throw new Exception("Datos de entrada estan incompletos, se requiere param1 = fecha, param2 = tipoProceso 1 sufi, 2 recaudoServ Publicos, 3 = ruta archivo properties, 4 = ruta generacion de archivos TXT");
					
					for(int i = 0; i < params.length; i++)
					{
						String param =  params[i];
						
						if(param.equals(GeneralConstants.BLANK))
							throw new Exception("parametro "+i+1+" invalido");
					}
				}
			}
			catch(Exception e)
			{
				throw new OperacionException("Problema en parametros de entrada | "+e);
			}
		}
	
		public static void main(String[] args) throws Exception{
			
			String fecha 		= null;
			String fechaHasta	= null; // Esta fecha es para el proceso de reporte de medios magneticos de la DIAN
			String proceso 		= null;
			String rutaProp 	= null;
			String rutaFiles 	= null;
			
			try
			{
				Logger.getLogger(CargaInformacion.class.getName()).log(Level.INFO, "Inicia Generacion ");

				/*
				 * 		Debe llegar en el comando de ejecucion los parametros:
				 * 1	La fecha de proceso en formato yyyymmdd 
				 * 2	Tipo de carga de recaudo 1 para sufi 2 para recaudo de servicios publicos
				 * 3	La ruta donde esta el archivo de propiedades que usa el proceso
				 * 4	La ruta donde se pondran los archivos generados
				 * */
//				validarEntradasVacias(args);
//				
//				fecha 		= args[0];
//				proceso 	= args[1];
//				rutaProp 	= args[2];
//				rutaFiles 	= args[3];
//				fechaHasta	= args[4];
				
				
				fecha 		= "20140409";//20140409 fecha para prueba proceso 2, 20140522 fecha de prueba para proceso 1
				proceso 	= "2";
				rutaProp 	= "C:\\COLCOMERCIO\\db\\database.properties";
				rutaFiles 	= "C:\\COLCOMERCIO\\db\\";
				fechaHasta	= "20140409";
				
				// Set asigna el valor de la ruta del properties en una variable estatica de modo que sea visible en todos los procesos.
				
				
				
				ManejoParam.RUTAPROP = rutaProp;
				
				if(proceso != null && proceso.equals("1")) // proceso de Sufi original de Carolina
				{
					new RecaudosSufiService().generarArchivoRecaudos(fecha, rutaFiles);
				}
				else if(proceso != null && proceso.equals("2")) // proceso de servicios Publicos
				{					
					// Este metodo ejecuta las consultas, arma la informacion que se va a poner en los archivos TXT
					
					List<ArchivoTXT> archivos = new RecaudoServiciosPublicosService().generarArchivosRecaudo(fecha, rutaFiles);

					if(archivos != null && !archivos.isEmpty())
					
					for(ArchivoTXT archivo : archivos)
					{
						// Este metodo toma la informacion que esta en objetos y la vuelve Strings de modo que se
						// pueda escribir en el archivo TXT
						
						archivo.llenarArchivo();
					}
				}
				else if(proceso != null && proceso.equals("3"))// Generacion de informacion de reporte medios magneticos DIAN
				{
					if(fechaHasta == null || fechaHasta.equals(GeneralConstants.BLANK))
						throw new Exception("La fecha hasta es necesaria para ejecutar el proceso, por favor verificar");
					
					List<ArchivoTXT> archivos = new ConsultasDIANService().genArchivosMediosMagneticosDIAN(fecha, fechaHasta, rutaFiles);

					if(archivos != null && !archivos.isEmpty())
						
					for(ArchivoTXT archivo : archivos)
					{
						// Este metodo toma la informacion que esta en objetos y la vuelve Strings de modo que se
						// pueda escribir en el archivo TXT
						
						archivo.llenarArchivo();
					}

				}
				
				Logger.getLogger(CargaInformacion.class.getName()).log(Level.INFO, "Generacion terminada ");
			}
			catch(Exception ex)
			{
				Logger.getLogger(CargaInformacion.class.getName()).log(Level.SEVERE, "problema ejecutando carga de Recaudo", ex);
			}
		}
}
